package com.sinafenqi.designDemo.proxy.jdkDynamic;

import com.sinafenqi.designDemo.proxy.jdkDynamic.LiuDehua;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * @author hujinsheng
 * @project DesignModeproxy
 * @create 2017-11-06 17:49
 **/
public class LiuDeHuaProxy implements InvocationHandler {
    Person ldh= new LiuDehua();

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        if (method.getName().equals("sing")) {
            System.out.println("我是他的经纪人，要找他唱歌得先给十万块钱！！");
            //已经给钱了，经纪人自己不会唱歌，就只能找刘德华去唱歌！
            return method.invoke(ldh, args); //代理对象调用真实目标对象的sing方法去处理用户请求
        }
        //如果调用的是代理对象的dance方法
        if (method.getName().equals("dance")) {
            System.out.println("我是他的经纪人，要找他跳舞得先给二十万块钱！！");
            //已经给钱了，经纪人自己不会唱歌，就只能找刘德华去跳舞！
            return method.invoke(ldh, args);//代理对象调用真实目标对象的dance方法去处理用户请求
        }
        return null;
    }

    public Person getProxy(){
        return (Person) Proxy.newProxyInstance(ldh.getClass().getClassLoader(),ldh.getClass().getInterfaces(),this);
    }
}
